home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Madness 2 #12 / Multimedia Madness - Volume 2 - Issue 12 (SAMS Publishing) (November 25, 1992).iso / nemo / zincdemo / zincdemo.cpp < prev    next >
C/C++ Source or Header  |  1992-08-30  |  39KB  |  936 lines

  1. //    Zinc Interface Library Demonstration - ZINCDEMO.CPP
  2. //    COPYRIGHT (C) 1990-1992.  All Rights Reserved.
  3. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  4.  
  5. #include <ui_win.hpp>
  6. #define USE_HELP_CONTEXTS
  7. #include "zincdemo.hpp"
  8.  
  9. UIW_WINDOW *_sampleWindow = NULL;
  10. UIW_WINDOW *demoWindow = NULL;
  11. UIW_TEXT *_information = NULL;
  12. UI_STORAGE *_storage = NULL;
  13.  
  14. void HelpInformation(const char *helpName, EVENT_TYPE helpContext)
  15. {
  16.     demoWindow->helpContext = (UI_HELP_CONTEXT)helpContext;
  17.  
  18.     if (!_storage)
  19.         return;
  20.  
  21.     _storage->ChDir("~UI_HELP");
  22.     UI_STORAGE_OBJECT hFile(*_storage, helpName, ID_HELP_CONTEXT, UIS_READ);
  23.     if (!hFile.objectError)
  24.     {
  25.         char *message;                    // Read the help context title.
  26.         hFile.Load(&message);
  27.         delete message;
  28.         hFile.Load(&message);            // Read the help context.
  29.          _information->DataSet(message);
  30.         delete message;
  31.     }
  32. }
  33.  
  34. EVENT_TYPE About(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  35. {
  36.     if (ccode != L_SELECT)
  37.         return (ccode);
  38.  
  39.     // Compute the window region.
  40.     UI_DISPLAY *display = object->display;
  41.     int width = 42;
  42.     int height = display->isText ? 7 : 6;
  43.     int left = (display->columns / display->cellWidth - width) / 2;
  44.     int top = (display->lines / display->cellHeight - height) / 2;
  45.  
  46.     char *message = "Zinc 3.0 Demonstration.";
  47.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  48.     *window
  49.         + new UIW_BORDER
  50.         + &(*new UIW_SYSTEM_BUTTON
  51.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  52.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  53.         + new UIW_TITLE("About...");
  54.     if (display->isText)
  55.         *window
  56.             + new UIW_STRING(2, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  57.     else
  58.         *window
  59.             + new UIW_ICON(3, 1, "minIcon")
  60.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  61.     *window
  62.         + new UIW_BUTTON(15, height - 3, 10, "~OK",
  63.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  64.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  65.     object->windowManager->Add(window);
  66.     return (ccode);
  67. }
  68.  
  69. EVENT_TYPE Exit(UI_DISPLAY *display, UI_EVENT_MANAGER *, UI_WINDOW_MANAGER *windowManager)
  70. {
  71.     // Compute the window region.
  72.     int width = 44;
  73.     int height = display->isText ? 7 : 6;
  74.     int left = (display->columns / display->cellWidth - width) / 2;
  75.     int top = (display->lines / display->cellHeight - height) / 2;
  76.  
  77.     // Create the exit window.
  78.     char *message = "This will close the demonstration.";
  79.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height,
  80.         WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  81.     *window
  82.         + new UIW_BORDER
  83.         + &(*new UIW_SYSTEM_BUTTON
  84.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  85.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  86.         + new UIW_TITLE("Zinc 3.0 Demonstration");
  87.     if (display->isText)
  88.         *window
  89.             + new UIW_STRING(4, 1, 36, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  90.     else
  91.         *window
  92.             + new UIW_ICON(2, 1, "ASTERISK")
  93.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  94.     *window
  95.         + new UIW_BUTTON(10, height - 3, 10, "~OK",
  96.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  97.             WOF_JUSTIFY_CENTER, NULL, L_EXIT)
  98.         + new UIW_BUTTON(22, height - 3, 10, "~Cancel",
  99.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  100.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  101.     *windowManager + window;
  102.     return (S_CONTINUE);
  103. }
  104.  
  105. EVENT_TYPE Error(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  106. {
  107.     if (ccode == L_SELECT)
  108.     {
  109.         demoWindow->helpContext = HELP_ERROR_SYSTEM;
  110.         object->errorSystem->ReportError(object->windowManager, WOS_UNANSWERED,
  111.             "This window is used to present error information.");
  112.     }
  113.     return (ccode);
  114. }
  115.  
  116. EVENT_TYPE Help(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  117. {
  118.     if (ccode == L_SELECT)
  119.     {
  120.         EVENT_TYPE value;
  121.         object->Information(GET_VALUE, &value);
  122.         object->helpSystem->DisplayHelp(object->windowManager,
  123.             (UI_HELP_CONTEXT)value);
  124.     }
  125.     return (ccode);
  126. }
  127.  
  128. EVENT_TYPE ButtonWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  129. {
  130.     if (ccode == L_SELECT)
  131.     {
  132.         _sampleWindow->Destroy();
  133.         if (_sampleWindow->display->isText)
  134.         {
  135.             *_sampleWindow
  136.                    + new UIW_BUTTON(10, 2, 9,  "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  137.                    + new UIW_BUTTON(10, 4, 9,  "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  138.                    + new UIW_BUTTON(10, 6, 9,  "Help", BTF_NO_TOGGLE | BTF_AUTO_SIZE);
  139.         }
  140.         else
  141.         {
  142.             *_sampleWindow
  143.                 + new UIW_BUTTON(7, 1, 5, NULL, BTF_NO_TOGGLE,
  144.                     WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  145.                 + new UIW_BUTTON(7, 3, 5, NULL, BTF_NO_TOGGLE,
  146.                     WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  147.                 + new UIW_BUTTON(7, 5, 5, NULL, BTF_NO_TOGGLE,
  148.                     WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")
  149.                    + new UIW_BUTTON(20, 1, 8, "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  150.                    + new UIW_BUTTON(20, 3, 8, "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  151.                 + new UIW_BUTTON(20, 5, 10, "Mixed", BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  152.                     WOF_NO_FLAGS, NULL, 0, "file");
  153.         }
  154.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  155.         EVENT_TYPE value;
  156.         object->Information(GET_VALUE, &value);
  157.         HelpInformation("INFO_BUTTON", value);
  158.     }
  159.     return (ccode);
  160. }
  161.  
  162. EVENT_TYPE CheckWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  163. {
  164.     if (ccode == L_SELECT)
  165.     {
  166.         _sampleWindow->Destroy();
  167.         *_sampleWindow
  168.             + &(*new UIW_GROUP(8, 1, 22, 5, "Check Box Group", WNF_SELECT_MULTIPLE)
  169.                  + new UIW_BUTTON(2, 1, 18, "Check Box A", BTF_CHECK_BOX, WOF_NO_FLAGS)
  170.                 + new UIW_BUTTON(2, 2, 18, "Check Box B", BTF_CHECK_BOX, WOF_NO_FLAGS)
  171.                 + new UIW_BUTTON(2, 3, 18, "Check Box C", BTF_CHECK_BOX, WOF_NO_FLAGS)
  172.                    + new UIW_BUTTON(2, 4, 18, "Check Box D", BTF_CHECK_BOX, WOF_NO_FLAGS));
  173.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  174.         EVENT_TYPE value;
  175.         object->Information(GET_VALUE, &value);
  176.         HelpInformation("INFO_CHECK_BOX", value);
  177.     }
  178.     return (ccode);
  179. }
  180.  
  181. EVENT_TYPE ComboWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  182. {
  183.     if (ccode == L_SELECT)
  184.     {
  185.         _sampleWindow->Destroy();
  186.         *_sampleWindow
  187.             + &(* new UIW_COMBO_BOX(1, 1, 17, 6)
  188.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  189.                 + new UIW_STRING(0, 0, 15, "Combo 1")
  190.                 + new UIW_STRING(0, 0, 15, "Combo 2")
  191.                 + new UIW_STRING(0, 0, 15, "Combo 3")
  192.                 + new UIW_STRING(0, 0, 15, "Combo 4")
  193.                 + new UIW_STRING(0, 0, 15, "Combo 5")   
  194.                 + new UIW_STRING(0, 0, 15, "Combo 6")   
  195.                 + new UIW_STRING(0, 0, 15, "Combo 7")   
  196.                 + new UIW_STRING(0, 0, 15, "Combo 8")   
  197.                 + new UIW_STRING(0, 0, 15, "Combo 9")   
  198.                 + new UIW_STRING(0, 0, 15, "Combo 10"));
  199.         *_sampleWindow
  200.             + &(* new UIW_COMBO_BOX(20, 1, 17, 6, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN)
  201.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  202.                 + new UIW_BUTTON(0, 0, 22, "String",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "string")
  203.                 + new UIW_BUTTON(0, 0, 22, "F String",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "fmtstr")
  204.                 + new UIW_BUTTON(0, 0, 22, "Text",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "text")
  205.                 + new UIW_BUTTON(0, 0, 22, "Date",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "date")
  206.                 + new UIW_BUTTON(0, 0, 22, "Time",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "time")
  207.                 + new UIW_BUTTON(0, 0, 22, "Number",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "number")
  208.                 + new UIW_BUTTON(0, 0, 22, "Button",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "button")
  209.                 + new UIW_BUTTON(0, 0, 22, "Radio",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "radio")
  210.                 + new UIW_BUTTON(0, 0, 22, "Chk Box",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "check")
  211.                 + new UIW_BUTTON(0, 0, 22, "Hz List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hlist")
  212.                 + new UIW_BUTTON(0, 0, 22, "Vt List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vlist")
  213.                 + new UIW_BUTTON(0, 0, 22, "Combo",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "combo")
  214.                 + new UIW_BUTTON(0, 0, 22, "Hz Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hscroll")
  215.                 + new UIW_BUTTON(0, 0, 22, "Vt Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vscroll")
  216.                 + new UIW_BUTTON(0, 0, 22, "Window",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "window")
  217.                 + new UIW_BUTTON(0, 0, 22, "Tool Bar",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "toolbar")
  218.                 + new UIW_BUTTON(0, 0, 22, "Prompt",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "prompt")
  219.                 + new UIW_BUTTON(0, 0, 22, "Group",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "group")
  220.                 + new UIW_BUTTON(0, 0, 22, "Icon",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "icon"));
  221.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  222.         EVENT_TYPE value;
  223.         object->Information(GET_VALUE, &value);
  224.         HelpInformation("INFO_COMBO_BOX", value);
  225.     }
  226.     return (ccode);
  227. }
  228.  
  229. EVENT_TYPE DateWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  230. {
  231.     if (ccode == L_SELECT)
  232.     {
  233.         _sampleWindow->Destroy();
  234.         UI_DATE date;
  235.         *_sampleWindow
  236.                + new UIW_PROMPT(1, 1, "Default:")
  237.             + new UIW_DATE(12, 1, 25, &date, NULL)
  238.                + new UIW_PROMPT(1, 2, "Month:")
  239.             + new UIW_DATE(12, 2, 25, &date, NULL, DTF_ALPHA_MONTH)
  240.                + new UIW_PROMPT(1, 3, "Weekday:")
  241.             + new UIW_DATE(12, 3, 25, &date, NULL, DTF_SHORT_MONTH | DTF_SHORT_DAY)
  242.                + new UIW_PROMPT(1, 4, "Slash:")
  243.             + new UIW_DATE(12, 4, 25, &date, NULL, DTF_SLASH)
  244.                + new UIW_PROMPT(1, 5, "Military:")
  245.             + new UIW_DATE(12, 5, 25, &date, NULL, DTF_MILITARY_FORMAT);
  246.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  247.         EVENT_TYPE value;
  248.         object->Information(GET_VALUE, &value);
  249.         HelpInformation("INFO_DATE", value);
  250.     }
  251.     return (ccode);
  252. }
  253.  
  254. class EXPORT FONT_STRING : public UIW_STRING
  255. {
  256. public:
  257.     FONT_STRING(int left, int top, int width, char *text, int maxLength,
  258.         LOGICAL_FONT _font, STF_FLAGS stFlags = STF_NO_FLAGS,
  259.         WOF_FLAGS woFlags = WOF_BORDER | WOF_AUTO_CLEAR) :
  260.         UIW_STRING(left, top, width, text, maxLength, stFlags, woFlags) { font = _font; }
  261.     virtual ~FONT_STRING(void) { };
  262. };
  263.  
  264.  
  265. EVENT_TYPE FontSupport(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  266. {
  267.     if (ccode == L_SELECT)
  268.     {
  269.         _sampleWindow->Destroy();
  270.             *_sampleWindow
  271.                + new UIW_PROMPT(1, 1, "System:")
  272.                + new FONT_STRING(10, 1, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SYSTEM_FONT,
  273.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  274.                + new UIW_PROMPT(1, 3, "Dialog:")
  275.                + new FONT_STRING(10, 3, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_DIALOG_FONT,
  276.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  277.                + new UIW_PROMPT(1, 5, "Small:")
  278.                + new FONT_STRING(10, 5, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SMALL_FONT,
  279.                 STF_NO_FLAGS, WOF_NON_SELECTABLE);
  280.  
  281.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  282.  
  283.         EVENT_TYPE value;
  284.         object->Information(GET_VALUE, &value);
  285.         HelpInformation("INFO_FONT_SUPPORT", value);
  286.     }
  287.     return (ccode);
  288. }
  289.  
  290. EVENT_TYPE FStringWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  291. {
  292.     if (ccode == L_SELECT)
  293.     {
  294.         _sampleWindow->Destroy();
  295.             *_sampleWindow
  296.                + new UIW_PROMPT(1, 2, "Phone #:")
  297.                + new UIW_FORMATTED_STRING(10, 2, 27, "8017858900", "LNNNLLNNNLNNNN", "(...) ...-....")
  298.                + new UIW_PROMPT(1, 3, "Part #:")
  299.                + new UIW_FORMATTED_STRING(10, 3, 27, "ABC1234", "LAAALNNNNL", "[...*0000]")
  300.                + new UIW_PROMPT(1, 4, "Serial #:")
  301.                + new UIW_FORMATTED_STRING(10, 4, 27, "634922", "LLLLLNNNNLNN", "#ZIL-....-..");
  302.  
  303.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  304.  
  305.         EVENT_TYPE value;
  306.         object->Information(GET_VALUE, &value);
  307.         if (value == HELP_FORMATTED_STRING)
  308.             HelpInformation("INFO_FORMATTED_STRING", value);
  309.         else
  310.             HelpInformation("INFO_PROMPT", value);
  311.     }
  312.     return (ccode);
  313. }
  314.  
  315. EVENT_TYPE HzListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  316. {
  317.     if (ccode == L_SELECT)
  318.     {
  319.         _sampleWindow->Destroy();
  320.         UIW_HZ_LIST *list = new UIW_HZ_LIST(1, 1, 36, 5, 12, 1, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  321.         *list
  322.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL)
  323.                + new UIW_BUTTON(0, 0, 12, "File.1", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  324.                + new UIW_BUTTON(0, 0, 12, "File.2", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  325.                + new UIW_BUTTON(0, 0, 12, "File.3", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  326.                + new UIW_BUTTON(0, 0, 12, "File.4", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  327.                + new UIW_BUTTON(0, 0, 12, "File.5", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  328.                + new UIW_BUTTON(0, 0, 12, "File.6", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  329.                + new UIW_BUTTON(0, 0, 12, "File.7", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  330.                + new UIW_BUTTON(0, 0, 12, "File.8", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  331.                + new UIW_BUTTON(0, 0, 12, "File.9", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  332.                + new UIW_BUTTON(0, 0, 12, "File.7", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  333.                + new UIW_BUTTON(0, 0, 12, "File.8", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  334.                + new UIW_BUTTON(0, 0, 12, "File.9", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  335.                + new UIW_BUTTON(0, 0, 12, "File.10", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  336.                + new UIW_BUTTON(0, 0, 12, "File.11", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  337.                + new UIW_BUTTON(0, 0, 12, "File.12", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  338.                + new UIW_BUTTON(0, 0, 12, "File.13", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  339.                + new UIW_BUTTON(0, 0, 12, "File.14", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  340.                + new UIW_BUTTON(0, 0, 12, "File.15", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  341.                + new UIW_BUTTON(0, 0, 12, "File.16", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  342.                + new UIW_BUTTON(0, 0, 12, "File.17", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file");
  343.         *_sampleWindow + list;
  344.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  345.         EVENT_TYPE value;
  346.         object->Information(GET_VALUE, &value);
  347.         if (value == HELP_HLIST)
  348.             HelpInformation("INFO_HLIST", value);
  349.         else
  350.             HelpInformation("INFO_SCROLL_BAR", value);
  351.     }
  352.     return (ccode);
  353. }
  354.  
  355. EVENT_TYPE IconWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  356. {
  357.     if (ccode == L_SELECT)
  358.     {
  359.         _sampleWindow->Destroy();
  360.         *_sampleWindow
  361.             + new UIW_ICON(4, 2, "desk")
  362.             + new UIW_ICON(16, 2, "analog")
  363.             + new UIW_ICON(28, 2, "minIcon");
  364.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  365.         EVENT_TYPE value;
  366.         object->Information(GET_VALUE, &value);
  367.         HelpInformation("INFO_ICON", value);
  368.     }
  369.     return (ccode);
  370. }
  371.  
  372. EVENT_TYPE MenuWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  373. {
  374.     if (ccode == L_SELECT)
  375.     {
  376.         _sampleWindow->Destroy();
  377.         UIW_PULL_DOWN_MENU *menu = new UIW_PULL_DOWN_MENU();
  378.         *menu
  379.             + &(*new UIW_PULL_DOWN_ITEM("~File")
  380.                 + new UIW_POP_UP_ITEM("Option~1", MNIF_NO_FLAGS, BTF_NO_3D)
  381.                    + new UIW_POP_UP_ITEM("Option~2", MNIF_NO_FLAGS, BTF_NO_3D)
  382.                    + new UIW_POP_UP_ITEM("Option~3", MNIF_NO_FLAGS, BTF_NO_3D))
  383.             + &(*new UIW_PULL_DOWN_ITEM("Ca~scade")
  384.                    + &(*new UIW_POP_UP_ITEM("Option~1", MNIF_NO_FLAGS, BTF_NO_3D)
  385.                      + new UIW_POP_UP_ITEM("Option 1.~1", MNIF_NO_FLAGS, BTF_NO_3D)
  386.                     + &(* new UIW_POP_UP_ITEM("Option 1.~2", MNIF_NO_FLAGS, BTF_NO_3D)
  387.                           + new UIW_POP_UP_ITEM("Option 1.2.~1", MNIF_NO_FLAGS, BTF_NO_3D)
  388.                          + new UIW_POP_UP_ITEM("Option 1.2.~2", MNIF_NO_FLAGS, BTF_NO_3D)
  389.                             + new UIW_POP_UP_ITEM("Option 1.2.~3", MNIF_NO_FLAGS, BTF_NO_3D)))
  390.                    + new UIW_POP_UP_ITEM("Option~2", MNIF_NO_FLAGS, BTF_NO_3D)
  391.                    + new UIW_POP_UP_ITEM("Option~3", MNIF_NO_FLAGS, BTF_NO_3D));
  392.         *_sampleWindow
  393.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE)
  394.                 + new UIW_ICON(0, 0, "minIcon", "Menu Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  395.                 + new UIW_BORDER
  396.                 + new UIW_MAXIMIZE_BUTTON
  397.                 + new UIW_MINIMIZE_BUTTON
  398.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  399.                 + new UIW_TITLE("Menu Window")
  400.                 + menu);
  401.  
  402.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  403.         EVENT_TYPE value;
  404.         object->Information(GET_VALUE, &value);
  405.         if (value == HELP_WINDOW)
  406.             HelpInformation("INFO_WINDOW", value);
  407.         else if (value == HELP_PULL_DOWN_MENU)
  408.             HelpInformation("INFO_PULL_DOWN_MENU", value);
  409.         else if (value == HELP_PULL_DOWN_ITEM)
  410.             HelpInformation("INFO_PULL_DOWN_ITEM", value);
  411.         else if (value == HELP_POP_UP_MENU)
  412.             HelpInformation("INFO_POP_UP_MENU", value);
  413.         else
  414.             HelpInformation("INFO_POP_UP_MENU_ITEM", value);
  415.     }
  416.     return (ccode);
  417. }
  418.  
  419. EVENT_TYPE NumberWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  420. {
  421.     if (ccode == L_SELECT)
  422.     {
  423.         _sampleWindow->Destroy();
  424.         UI_BIGNUM number(1234L);
  425.         UI_BIGNUM negNumber(-1234L);
  426. //        UI_BIGNUM number("1234");
  427. //        UI_BIGNUM negNumber("(1234)");
  428.         *_sampleWindow
  429.                + new UIW_PROMPT(1, 1, "Default:")
  430.             + new UIW_BIGNUM(11, 1, 26, &number, NULL, NMF_NO_FLAGS)
  431.                + new UIW_PROMPT(1, 2, "No decimal:")
  432.             + new UIW_BIGNUM(11, 2, 26, &number, NULL, NMF_DECIMAL(0))
  433.                + new UIW_PROMPT(1, 3, "Currency:")
  434.             + new UIW_BIGNUM(11, 3, 26, &number, NULL, NMF_CURRENCY | NMF_COMMAS)
  435.                + new UIW_PROMPT(1, 4, "Credit:")
  436.             + new UIW_BIGNUM(11, 4, 26, &negNumber, NULL, NMF_CREDIT | NMF_COMMAS | NMF_DECIMAL(0))
  437.                + new UIW_PROMPT(1, 5, "Percent:")
  438.             + new UIW_BIGNUM(11, 5, 26, &number, NULL, NMF_PERCENT | NMF_DECIMAL(0));
  439.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  440.         EVENT_TYPE value;
  441.         object->Information(GET_VALUE, &value);
  442.         HelpInformation("INFO_BIGNUM", value);
  443.     }
  444.     return (ccode);
  445. }
  446.  
  447. EVENT_TYPE RadioWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  448. {
  449.     if (ccode == L_SELECT)
  450.     {
  451.         _sampleWindow->Destroy();
  452.         *_sampleWindow
  453.             + &(*new UIW_GROUP(8, 1, 22, 5, "Radio Button Group")
  454.                 + new UIW_BUTTON(2, 1, 18, "Radio Button 1", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  455.                    + new UIW_BUTTON(2, 2, 18, "Radio Button 2", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  456.                 + new UIW_BUTTON(2, 3, 18, "Radio Button 3", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  457.                    + new UIW_BUTTON(2, 4, 18, "Radio Button 4", BTF_RADIO_BUTTON, WOF_NO_FLAGS));
  458.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  459.         EVENT_TYPE value;
  460.         object->Information(GET_VALUE, &value);
  461.         if (value == HELP_GROUP)
  462.             HelpInformation("INFO_GROUP", value);
  463.         else
  464.             HelpInformation("INFO_RADIO_BUTTON", value);
  465.     }
  466.     return (ccode);
  467. }
  468.  
  469. EVENT_TYPE StringWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  470. {
  471.     if (ccode == L_SELECT)
  472.     {
  473.         _sampleWindow->Destroy();
  474.             *_sampleWindow
  475.                + new UIW_PROMPT(1, 2, "Name:")
  476.                + new UIW_STRING(10, 2, 27, "Zinc Software Incorporated", 100)
  477.                + new UIW_PROMPT(1, 3, "Address:")
  478.                + new UIW_STRING(10, 3, 27, "405 South 100 East", 100)
  479.                + new UIW_STRING(10, 4, 27, "Pleasant Grove, UT", 100);
  480.  
  481.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  482.  
  483.         EVENT_TYPE value;
  484.         object->Information(GET_VALUE, &value);
  485.         HelpInformation("INFO_STRING", value);
  486.     }
  487.     return (ccode);
  488. }
  489.  
  490. EVENT_TYPE TextWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  491. {
  492.     if (ccode == L_SELECT)
  493.     {
  494.         _sampleWindow->Destroy();
  495.         *_sampleWindow
  496.             + &(*new UIW_TEXT(1, 1, 36, 5, 
  497.                 "This is text to demonstrate a \r\n"
  498.                 "text field with scroll bars. \r\n"
  499.                 "Word wrap can also be used as \r\n"
  500.                 "shown below.", 256, WNF_NO_WRAP, WOF_BORDER)
  501.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_CORNER)
  502.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  503.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL));
  504.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  505.         EVENT_TYPE value;
  506.         object->Information(GET_VALUE, &value);
  507.         HelpInformation("INFO_TEXT", value);
  508.     }
  509.     return (ccode);
  510. }
  511.  
  512. EVENT_TYPE TimeWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  513. {
  514.     if (ccode == L_SELECT)
  515.     {
  516.         _sampleWindow->Destroy();
  517.         UI_TIME time;
  518.         *_sampleWindow
  519.                + new UIW_PROMPT(1, 1, "Default:")
  520.             + new UIW_TIME(12, 1, 25, &time, NULL, TMF_NO_FLAGS)
  521.                + new UIW_PROMPT(1, 2, "Hours only:")
  522.             + new UIW_TIME(12, 2, 25, &time, NULL, TMF_NO_MINUTES)
  523.                + new UIW_PROMPT(1, 3, "Seconds:")
  524.             + new UIW_TIME(12, 3, 25, &time, NULL, TMF_SECONDS)
  525.                + new UIW_PROMPT(1, 4, "Hundredths:")
  526.             + new UIW_TIME(12, 4, 25, &time, NULL, TMF_SECONDS | TMF_HUNDREDTHS)
  527.                + new UIW_PROMPT(1, 5, "24 hour:")
  528.             + new UIW_TIME(12, 5, 25, &time, NULL, TMF_TWENTY_FOUR_HOUR);
  529.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  530.         EVENT_TYPE value;
  531.         object->Information(GET_VALUE, &value);
  532.         HelpInformation("INFO_TIME", value);
  533.     }
  534.     return (ccode);
  535. }
  536.  
  537. EVENT_TYPE ToolWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  538. {
  539.     if (ccode == L_SELECT)
  540.     {
  541.         _sampleWindow->Destroy();
  542.         *_sampleWindow
  543.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE)
  544.                 + new UIW_ICON(0, 0, "minIcon", "Tool Bar Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  545.                 + new UIW_BORDER
  546.                 + new UIW_MAXIMIZE_BUTTON
  547.                 + new UIW_MINIMIZE_BUTTON
  548.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  549.                 + new UIW_TITLE("Tool Bar Window")
  550.                 + &(*new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_WRAP)
  551.                     + new UIW_STRING(2, 0, 10, "Default", 100)
  552.                     + new UIW_BUTTON(15, 0, 5, NULL, BTF_NO_TOGGLE,
  553.                         WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  554.                     + new UIW_BUTTON(22, 0, 5, NULL, BTF_NO_TOGGLE,
  555.                         WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  556.                     + new UIW_BUTTON(29, 0, 5, NULL, BTF_NO_TOGGLE,
  557.                         WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")));
  558.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  559.         EVENT_TYPE value;
  560.         object->Information(GET_VALUE, &value);
  561.         HelpInformation("INFO_TOOL_BAR", value);
  562.     }
  563.     return (ccode);
  564. }
  565.  
  566. EVENT_TYPE VtListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  567. {
  568.     if (ccode == L_SELECT)
  569.     {
  570.         _sampleWindow->Destroy();
  571.         UIW_VT_LIST *list = new UIW_VT_LIST(1, 1, 17, 5, NULL, WNF_NO_WRAP);
  572.         *list
  573.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  574.                + new UIW_STRING(0, 0, 17, "Vt-Item 1", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  575.                + new UIW_STRING(0, 0, 17, "Vt-Item 2", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  576.                + new UIW_STRING(0, 0, 17, "Vt-Item 3", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  577.                + new UIW_STRING(0, 0, 17, "Vt-Item 4", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  578.                + new UIW_STRING(0, 0, 17, "Vt-Item 5", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  579.                + new UIW_STRING(0, 0, 17, "Vt-Item 6", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  580.                + new UIW_STRING(0, 0, 17, "Vt-Item 7", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  581.                + new UIW_STRING(0, 0, 17, "Vt-Item 8", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  582.                + new UIW_STRING(0, 0, 17, "Vt-Item 9", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  583.                + new UIW_STRING(0, 0, 17, "Vt-Item 10", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  584.                + new UIW_STRING(0, 0, 17, "Vt-Item 11", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  585.                + new UIW_STRING(0, 0, 17, "Vt-Item 12", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  586.                + new UIW_STRING(0, 0, 17, "Vt-Item 13", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  587.                + new UIW_STRING(0, 0, 17, "Vt-Item 14", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  588.                + new UIW_STRING(0, 0, 17, "Vt-Item 15", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  589.                + new UIW_STRING(0, 0, 17, "Vt-Item 16", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  590.                + new UIW_STRING(0, 0, 17, "Vt-Item 17", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  591.                + new UIW_STRING(0, 0, 17, "Vt-Item 18", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  592.                + new UIW_STRING(0, 0, 17, "Vt-Item 19", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  593.                + new UIW_STRING(0, 0, 17, "Vt-Item 20", 20, STF_NO_FLAGS, WOF_VIEW_ONLY);
  594.         *_sampleWindow + list;
  595.         list = new UIW_VT_LIST(20, 1, 17, 5, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  596.         *list
  597.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  598.             + new UIW_BUTTON(0, 0, 17, "c:\\", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  599.             + new UIW_BUTTON(1, 0, 16, "work", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  600.             + new UIW_BUTTON(1, 0, 16, "docs", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  601.             + new UIW_BUTTON(1, 0, 15, "compiler", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  602.             + new UIW_BUTTON(2, 0, 15, "bin", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  603.             + new UIW_BUTTON(2, 0, 15, "lib", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  604.             + new UIW_BUTTON(2, 0, 15, "include", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  605.             + new UIW_BUTTON(2, 0, 15, "util", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  606.             + new UIW_BUTTON(2, 0, 15, "examples", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  607.             + new UIW_BUTTON(2, 0, 15, "tutor", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory");
  608.         *_sampleWindow + list;
  609.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY));
  610.         EVENT_TYPE value;
  611.         object->Information(GET_VALUE, &value);
  612.         if (value == HELP_VLIST)
  613.             HelpInformation("INFO_VLIST", value);
  614.         else
  615.             HelpInformation("INFO_SCROLL_BAR", value);
  616.     }
  617.     return (ccode);
  618. }
  619.  
  620. static UI_ITEM toolBarItems[] =
  621. {
  622.     { HELP_STRING,                StringWindow,    "string",        0 },
  623.     { HELP_FORMATTED_STRING,    FStringWindow,    "fmtstr",        0 },
  624.     { HELP_TEXT,                TextWindow,        "text",            0 },
  625.     { HELP_DATE,                DateWindow,        "date",            0 },
  626.     { HELP_TIME,                TimeWindow,        "time",            0 },
  627.     { HELP_BIGNUM,                NumberWindow,    "number",        0 },
  628.     { HELP_BUTTON,                ButtonWindow,    "button",        0 },
  629.     { HELP_RADIO_BUTTON,        RadioWindow,    "radio",        0 },
  630.     { HELP_CHECK_BOX,            CheckWindow,    "check",        0 },
  631.     { HELP_HLIST,                HzListWindow,    "hlist",        0 },
  632.     { HELP_VLIST,                VtListWindow,    "vlist",        0 },
  633.     { HELP_COMBO_BOX,            ComboWindow,    "combo",        0 },
  634.     { HELP_SCROLL_BAR,            HzListWindow,    "hscroll",        0 },
  635.     { HELP_SCROLL_BAR,            VtListWindow,    "vscroll",        0 },
  636.     { HELP_WINDOW,                MenuWindow,        "window",        0 },
  637.     { HELP_PULL_DOWN_MENU,        MenuWindow,        "pllmenu",        0 },
  638.     { HELP_POP_UP_MENU,            MenuWindow,        "popmenu",        0 },
  639.     { HELP_TOOL_BAR,            ToolWindow,        "toolbar",        0 },
  640.     { HELP_PROMPT,                FStringWindow,    "prompt",        0 },
  641.     { HELP_GROUP,                RadioWindow,    "group",        0 },
  642.     { HELP_ICON,                IconWindow,        "icon",            0 },
  643.     { HELP_FONT_SUPPORT,        FontSupport,    "font",            0 },
  644.     { 0,                        NULL,            NULL,            0 }
  645. };
  646.  
  647. static UI_ITEM listItems[] =
  648. {
  649.     { 0,                        NULL,            "- INPUT WINDOW OBJECTS -",        0 },
  650.     { HELP_STRING,                StringWindow,    "String",                        0 },
  651.     { HELP_FORMATTED_STRING,    FStringWindow,    "Formatted String",                0 },
  652.     { HELP_TEXT,                TextWindow,        "Text",                            0 },
  653.     { HELP_DATE,                DateWindow,        "Date",                            0 },
  654.     { HELP_TIME,                TimeWindow,        "Time",                            0 },
  655.     { HELP_BIGNUM,                NumberWindow,    "Number",                        0 },
  656.     { 0,                        NULL,            "- CONTROL WINDOW OBJECTS -",    0 },
  657.     { HELP_BUTTON,                ButtonWindow,    "Button",                        0 },
  658.     { HELP_RADIO_BUTTON,        RadioWindow,    "Radio-Button",                    0 },
  659.     { HELP_CHECK_BOX,            CheckWindow,    "Check Box",                    0 },
  660.     { HELP_HLIST,                HzListWindow,    "Hz List",                        0 },
  661.     { HELP_VLIST,                VtListWindow,    "Vt List",                        0 },
  662.     { HELP_COMBO_BOX,            ComboWindow,    "Combo-Box",                    0 },
  663.     { HELP_SCROLL_BAR,            HzListWindow,    "Hz Scroll",                    0 },
  664.     { HELP_SCROLL_BAR,            VtListWindow,    "Vt Scroll",                    0 },
  665.     { HELP_WINDOW,                MenuWindow,        "Window",                        0 },
  666.     { 0,                        NULL,            "- MENU WINDOW OBJECTS -",         0 },
  667.     { HELP_PULL_DOWN_MENU,        MenuWindow,        "Pull-Down Menu",                0 },
  668.     { HELP_POP_UP_MENU,            MenuWindow,        "Pop-Up Menu",                    0 },
  669.     { HELP_TOOL_BAR,            ToolWindow,        "Tool Bar",                        0 },
  670.     { 0,                        NULL,            "- STATIC WINDOW OBJECTS -",     0 },
  671.     { HELP_PROMPT,                FStringWindow,    "Prompt",                        0 },
  672.     { HELP_GROUP,                RadioWindow,    "Group",                        0 },
  673.     { HELP_ICON,                IconWindow,        "Icon",                            0 },
  674.     { 0,                        NULL,            "- OTHER OBJECTS -",             0 },
  675.     { HELP_KEYBOARD,            Help,            "Keyboard",                        0 },
  676.     { HELP_MOUSE,                Help,            "Mouse",                        0 },
  677.     { HELP_HELP_SYSTEM,            Help,            "Help System",                    0 },
  678.     { HELP_ERROR_SYSTEM,        Error,            "Error System",                    0 },
  679.     { HELP_FONT_SUPPORT,        FontSupport,    "Font Support",                    0 },
  680.     { 0,                        NULL,            NULL,                            0 }
  681. };
  682.  
  683. #ifdef _WINDOWS
  684. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR, int nCmdShow)
  685. {
  686.     // Set up the storage and display search path.
  687.     UI_PATH searchPath;
  688.  
  689.     UI_DISPLAY *display = new UI_MSWINDOWS_DISPLAY(hInstance, hPrevInstance, nCmdShow);
  690. #else
  691. #if defined(__BCPLUSPLUS__) | defined(__TCPLUSPLUS__)
  692. #include <graphics.h>
  693. #endif
  694. main(int argc, char *argv[])
  695. {
  696.     // Set up the storage and display search path.
  697.     UI_PATH searchPath(argv[0], TRUE);
  698.  
  699.     UI_DISPLAY *display = NULL;
  700.     if (argc <= 1 || (argv[1][1] != 't' && argv[1][1] != 'T'))
  701.     {
  702.  
  703.         #if defined(__ZTC__)
  704.             display = new UI_FG_DISPLAY;
  705.         #endif
  706.  
  707.         #if defined(_MSC_VER)
  708.             display = new UI_MSC_DISPLAY;
  709.         #endif
  710.  
  711.         #if defined(__BCPLUSPLUS__) | defined(__TCPLUSPLUS__)
  712.             int mode;
  713.             int driver = DETECT;
  714.             detectgraph(&driver, &mode);
  715.             switch(driver)
  716.             {
  717.             case EGA:
  718.             case EGAMONO:
  719.             case VGA:
  720.                 registerbgidriver(EGAVGA_driver);
  721.                 break;
  722.  
  723.             case CGA:
  724.                 registerbgidriver(CGA_driver);
  725.                 break;
  726.  
  727.             case HERCMONO:
  728.                 registerbgidriver(Herc_driver);
  729.                 break;
  730.             }
  731.             UI_BGI_DISPLAY::searchPath = &searchPath;
  732.             display = new UI_BGI_DISPLAY;
  733.         #endif
  734.     }
  735.     if (!display || !display->installed)
  736.         display = new UI_TEXT_DISPLAY;
  737. #endif
  738.  
  739.     UI_EVENT_MANAGER *eventManager = new UI_EVENT_MANAGER(display);
  740.     *eventManager
  741.         + new UID_KEYBOARD
  742.         + new UID_MOUSE
  743.         + new UID_CURSOR;
  744.  
  745.     UI_WINDOW_MANAGER *windowManager = new UI_WINDOW_MANAGER(display,
  746.         eventManager, Exit);
  747.  
  748.     // Initialize the default storage.
  749.     UI_STORAGE::searchPath = &searchPath;
  750.     _storage = new UI_STORAGE("zincdemo.dat", UIS_READ);
  751.     UI_WINDOW_OBJECT::defaultStorage = _storage;
  752.  
  753.     // Attach the error and help systems.
  754.     UI_WINDOW_OBJECT::errorSystem = new UI_ERROR_SYSTEM;
  755.     UI_WINDOW_OBJECT::helpSystem = new UI_HELP_SYSTEM("zincdemo.dat",
  756.         windowManager, HELP_GENERAL);
  757.  
  758.     // Check for data file errors.
  759.     if (UI_WINDOW_OBJECT::defaultStorage->storageError)
  760.     {
  761.         UI_WINDOW_OBJECT::errorSystem->ReportError(windowManager,
  762.             WOS_NO_STATUS, "Error opening the data file <DEMO.DAT>.\n");
  763.  
  764.          delete UI_WINDOW_OBJECT::helpSystem;
  765.          delete UI_WINDOW_OBJECT::errorSystem;
  766.         delete _storage;
  767.         delete windowManager;
  768.         delete eventManager;
  769.         delete display;
  770.  
  771.         return (1);
  772.     }
  773.  
  774.     // Create the main menu and items to add to it.
  775.     UIW_PULL_DOWN_MENU *mainMenu = new UIW_PULL_DOWN_MENU;
  776.     UIW_PULL_DOWN_ITEM *fileMenu = new UIW_PULL_DOWN_ITEM("~File");
  777.     UIW_PULL_DOWN_ITEM *objectMenu = new UIW_PULL_DOWN_ITEM("~Object");
  778.     UIW_PULL_DOWN_ITEM *helpMenu = new UIW_PULL_DOWN_ITEM("~Help");
  779.  
  780.     // Add items to the File drop down menu.
  781.     *fileMenu
  782.         + new UIW_POP_UP_ITEM("E~xit", MNIF_NO_FLAGS, BTF_SEND_MESSAGE, WOF_NO_FLAGS, NULL, L_EXIT_FUNCTION)
  783.         + new UIW_POP_UP_ITEM
  784.         + new UIW_POP_UP_ITEM("~About...", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, About);
  785.  
  786.     // Create the cascaded menu for Input window objects.
  787.     UIW_POP_UP_ITEM *inputItem = new UIW_POP_UP_ITEM("~Input");
  788.     *inputItem
  789.         + new UIW_POP_UP_ITEM("~String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, StringWindow, HELP_STRING)
  790.         + new UIW_POP_UP_ITEM("~Formatted String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_FORMATTED_STRING)
  791.         + new UIW_POP_UP_ITEM("Te~xt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TextWindow, HELP_TEXT)
  792.         + new UIW_POP_UP_ITEM
  793.         + new UIW_POP_UP_ITEM("~Date", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, DateWindow, HELP_DATE)
  794.         + new UIW_POP_UP_ITEM("~Time", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TimeWindow, HELP_TIME)
  795.         + new UIW_POP_UP_ITEM(NULL)
  796.         + new UIW_POP_UP_ITEM("~Number", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, NumberWindow, HELP_BIGNUM);
  797.  
  798.     // Create the cascaded menu for Control window objects.
  799.     UIW_POP_UP_ITEM *controlItem = new UIW_POP_UP_ITEM("~Control");
  800.     *controlItem
  801.         + new UIW_POP_UP_ITEM("~Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ButtonWindow, HELP_BUTTON)
  802.         + new UIW_POP_UP_ITEM("~Radio Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_RADIO_BUTTON)
  803.         + new UIW_POP_UP_ITEM("Check ~Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, CheckWindow, HELP_CHECK_BOX)
  804.         + new UIW_POP_UP_ITEM
  805.         + new UIW_POP_UP_ITEM("~Hz-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_HLIST)
  806.         + new UIW_POP_UP_ITEM("~Vt-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_VLIST)
  807.         + new UIW_POP_UP_ITEM("~Combo Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ComboWindow, HELP_COMBO_BOX)
  808.         + new UIW_POP_UP_ITEM
  809.         + new UIW_POP_UP_ITEM("~Hz-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_SCROLL_BAR)
  810.         + new UIW_POP_UP_ITEM("~Vt-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_SCROLL_BAR)
  811.         + new UIW_POP_UP_ITEM
  812.         + new UIW_POP_UP_ITEM("Child ~Window", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_WINDOW);
  813.  
  814.     // Create the cascaded menu for Menu window objects.
  815.     UIW_POP_UP_ITEM *menuItem = new UIW_POP_UP_ITEM("~Menu");
  816.     *menuItem
  817.         + new UIW_POP_UP_ITEM("~Pull-Down Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_PULL_DOWN_MENU)
  818.         + new UIW_POP_UP_ITEM("Pop-Up ~Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_POP_UP_MENU)
  819.         + new UIW_POP_UP_ITEM("Tool ~Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ToolWindow, HELP_TOOL_BAR);
  820.  
  821.     // Create the cascaded menu for Static window objects.
  822.     UIW_POP_UP_ITEM *staticItem = new UIW_POP_UP_ITEM("~Static");
  823.     *staticItem
  824.         + new UIW_POP_UP_ITEM("~Prompt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_PROMPT)
  825.         + new UIW_POP_UP_ITEM("~Group", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_GROUP)
  826.         + new UIW_POP_UP_ITEM
  827.         + new UIW_POP_UP_ITEM("~Icon", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, IconWindow, HELP_ICON);
  828.  
  829.     // Add the cascaded menu items to the Object drop down menu.
  830.     *objectMenu
  831.         + inputItem
  832.         + controlItem
  833.         + menuItem
  834.         + staticItem;
  835.  
  836.     // Add items to the Help drop down menu.
  837.     *helpMenu
  838.         + new UIW_POP_UP_ITEM("~General", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_GENERAL)
  839.         + new UIW_POP_UP_ITEM("~Window manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_WINDOW_MANAGER)
  840.         + new UIW_POP_UP_ITEM("~Event manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_EVENT_MANAGER)
  841.         + new UIW_POP_UP_ITEM("~Screen display", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_SCREEN_DISPLAY)
  842.         + new UIW_POP_UP_ITEM("~Zinc Designer", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ZINC_DESIGNER)
  843.         + new UIW_POP_UP_ITEM("~Persistent objects", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_PERSISTENT_OBJECTS)
  844.         + new UIW_POP_UP_ITEM("~Class hierarchy", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_CLASS_HIERARCHY)
  845.         + new UIW_POP_UP_ITEM
  846.         + new UIW_POP_UP_ITEM("~Order info", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ORDER_INFORMATION);
  847.  
  848.     // Add the pull-down items (with their menus) to the main menu.
  849.     *mainMenu
  850.         + fileMenu
  851.         + objectMenu
  852.         + helpMenu;
  853.  
  854.     // Create main window and add objects (border, menu, minimize icon, etc.) to it.
  855.     int width = 74;
  856.     int height = display->isText ? 16 : 18;
  857.     int left = (display->columns / display->cellWidth - width) / 2;
  858.     int top = (display->lines / display->cellHeight - height) / 2;
  859.     if (top < 0)
  860.         top = 0;
  861.     demoWindow = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_NO_SIZE);
  862.     *demoWindow
  863.         + new UIW_ICON(0, 0, "minIcon", "Zinc Demo", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  864.         + new UIW_BORDER
  865.         + new UIW_MAXIMIZE_BUTTON
  866.         + new UIW_MINIMIZE_BUTTON
  867.         + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  868.         + new UIW_TITLE("Zinc 3.0 Demonstration")
  869.         + mainMenu;
  870.  
  871.     // Create the tool bar and add it to the window.
  872.     if (!display->isText && top > 0)
  873.     {
  874.         UIW_TOOL_BAR *toolBar = new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_FLAGS,
  875.             WOF_BORDER | WOF_NON_FIELD_REGION, WOAF_NO_FLAGS);
  876.         for (int i = 0; toolBarItems[i].text; i++)
  877.             *toolBar + new UIW_BUTTON(0, 0, 6, NULL,
  878.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  879.                 WOF_JUSTIFY_CENTER, (USER_FUNCTION)toolBarItems[i].data,
  880.                 toolBarItems[i].value, toolBarItems[i].text);
  881.         *demoWindow + toolBar;
  882.     }
  883.  
  884.     // Create the object list and add it to the window.
  885.     UIW_VT_LIST *sampleList = new UIW_VT_LIST(2, 1, 30, 11, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  886.     *sampleList + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  887.     for (int i = 0; listItems[i].text; i++)
  888.         if (listItems[i].value)
  889.             *sampleList + new UIW_BUTTON(0, 0, 28, listItems[i].text,
  890.                 BTF_RADIO_BUTTON, WOF_NO_FLAGS,
  891.                 (USER_FUNCTION)listItems[i].data, listItems[i].value);
  892.         else
  893.             *sampleList + new UIW_STRING(0, 0, 29, listItems[i].text,
  894.                 -1, STF_NO_FLAGS, WOF_NON_SELECTABLE);
  895.     *demoWindow + sampleList;
  896.  
  897.     // Create the sample window area and add it to the window.
  898.     _sampleWindow = new UIW_WINDOW(34, 0, 38, 7, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE);
  899.     _sampleWindow->wnFlags |= WNF_NO_WRAP;
  900.     *demoWindow + _sampleWindow;
  901.  
  902.     // Create the information text field and add it to the window.
  903.     _information = new UIW_TEXT(35, 7, 36, 5, NULL, 2048, WNF_NO_FLAGS, WOF_BORDER | WOF_VIEW_ONLY);
  904.     *_information + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  905.     *demoWindow + _information;
  906.  
  907.     // Add the demonstration window to the window manager (to be displayed).
  908.     *windowManager + demoWindow;
  909.  
  910.     // This line assigns the exit function to be called before the demo
  911.     // window is closed.  It MUST be after the window is added to windowManager.
  912.     windowManager->screenID = demoWindow->screenID;
  913.  
  914.     // Initialize the information text field.
  915.     HelpInformation("INFO_GENERAL", HELP_GENERAL);
  916.  
  917.     // Process user events.
  918.     EVENT_TYPE ccode;
  919.     do
  920.     {
  921.         UI_EVENT event;
  922.         eventManager->Get(event);
  923.         ccode = windowManager->Event(event);
  924.     } while (ccode != L_EXIT && ccode != S_NO_OBJECT);
  925.  
  926.     // Clean up.
  927.      delete UI_WINDOW_OBJECT::helpSystem;
  928.      delete UI_WINDOW_OBJECT::errorSystem;
  929.     delete _storage;
  930.     delete windowManager;
  931.     delete eventManager;
  932.     delete display;
  933.  
  934.     return (0);
  935. }
  936.